package org.example.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect//表示当前是切面类 --告诉spring 我这里要对特定的方法进行切入 增强
@Component//交给spring管理
@Slf4j
public class RecordTimeAspect {

    /**
     * 切入点方法 -- 对谁在哪做怎么样的增强
     *      对谁--指定好原始方法 在哪--方位信息  做怎样的增强 逻辑代码怎么写
     * @param joinPoint  原始方法对象形式
     * @return
     * @throws Throwable
     */
    @Around("execution(* org.example.service.impl.*.*(..))")
    public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable {
        //记录方法执行前开始时间
        long start = System.currentTimeMillis();

        // 执行原始方法
        Object result = joinPoint.proceed();

        //记录方法执行结束 后时间
        long end = System.currentTimeMillis();

        //计算方法耗时
        log.info("耗时：{}毫秒",end-start);

        return result;
    }
}
